﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BE;
using BL;

namespace UI.DireccionAcademica
{
    public partial class FrmMantenimientoDeNotasAlumno : System.Web.UI.Page
    //public partial class FrmMantenimientoDeNotasAlumno : SiteMaster
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                LabelError.Text = null;
                try
                {
                    LLenarAlumno();
                    LlenarComboSemestre();
                    LlenarComboCilo();
                    LlenarComboCursos();
                }
                catch (Exception ex)
                {
                    LabelError.Text = ex.Message;
                }
            }
            else
            {

            }

        }

        OperacionesAlumnos opealumno = new OperacionesAlumnos();
        Alumno alumno = null;
        private void LLenarAlumno()
        {
            LabelError.Text = null;
            try
            {
                String codigo = (String)Session["CodigoAlumno"];
                alumno = opealumno.obtenerAlumnoporCodigo(codigo);
                LabelCodigo.Text = alumno.ID;
                LabelNombre.Text = alumno.APEPAT + " " + alumno.APEMAT + " " + alumno.NOMBRE;
                LabelEspecialidad.Text = alumno.Especialidad.DESCRIPCCION;
            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }

        private void LlenarComboSemestre()
        {
            LabelError.Text = null;
            try
            {
                OperacionesNotas openotas = new OperacionesNotas();
                cboSemestre.DataSource = openotas.ObtenerListadodeSemestreAlumnos(LabelCodigo.Text);
                cboSemestre.DataTextField = "semestre";
                cboSemestre.DataValueField = "semestre";
                cboSemestre.DataBind();
                cboSemestre.Items.Insert(0, "--Todos--");

                ComprobanteVenta_BL notas = new ComprobanteVenta_BL();
                comboSemestre.DataSource = notas.ObtenerPeriodos();
               // comboSemestre.DataSource = openotas.ObtenerListadodeSemestreAlumnos(LabelCodigo.Text);
                comboSemestre.DataTextField = "Semestre";
                comboSemestre.DataValueField = "Semestre";
                comboSemestre.DataBind();

            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }

        }


        private void LlenarComboCursos()
        {
            LabelError.Text = null;
            try
            {
                OperacionesNotas openotas = new OperacionesNotas();
                comboCursos.DataSource = openotas.ObtenerListadoCursosAlumno(LabelCodigo.Text);
                comboCursos.DataTextField = "NOMBRE_CURSO";
                comboCursos.DataValueField = "CODIGO";
                comboCursos.DataBind();
                comboCursos.Items.Insert(0, "--Todos--");
            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }

        }


        private void LlenarComboCilo()
        {
            LabelError.Text = null;
            try
            {
                OperacionesNotas openotas = new OperacionesNotas();
                cbCiclo.DataSource = openotas.ObtenerListadoCiclosAlumnos(LabelCodigo.Text);
                cbCiclo.DataTextField = "ciclos";
                cbCiclo.DataValueField = "ciclos";
                cbCiclo.DataBind();
                cbCiclo.Items.Insert(0, "--Todos--");

            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }


        private void LlenarComboCiloNota()
        {
            LabelError.Text = null;
            try
            {
                OperacionesNotas openotas = new OperacionesNotas();
                comboCiclos.DataSource = openotas.ObtenerListadoCiclosAlumnos(LabelCodigo.Text);
                comboCiclos.DataTextField = "ciclos";
                comboCiclos.DataValueField = "ciclos";
                comboCiclos.DataBind();
            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }


        protected void btnBuscar_Click1(object sender, EventArgs e)
        {
            LabelError.Text = null;
            try
            {
                LLenarGrillaNota();

            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }

        private void LLenarGrillaNota()
        {

            gridListadoNotas.Caption = null;
            LabelError.Text = null;
            try
            {
                Session["ListadoNotas"] = null;
                OperacionesNotas openotas = new OperacionesNotas();
                List<ListadoNotasDeAlumno> listado = openotas.ObtenerListadoNotasAlumnos(LabelCodigo.Text, ArmarFiltro());
                if (listado.Count == 0)
                {
                    gridListadoNotas.Caption = "No se encontraron niguna nota";
                }
                Session["ListadoNotas"] = listado;
                gridListadoNotas.DataSource = listado;
                gridListadoNotas.DataBind();
            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }



        private void LLenarGrillaNotaCache()
        {
            gridListadoNotas.Caption = null;
            LabelError.Text = null;
            try
            {
                List<ListadoNotasDeAlumno> listado = (List<ListadoNotasDeAlumno>)Session["ListadoNotas"];
                if (listado.Count == 0)
                {
                    gridListadoNotas.Caption = "No se encontraron niguna nota";
                }
                Session["ListadoNotas"] = listado;
                gridListadoNotas.DataSource = listado;
                gridListadoNotas.DataBind();
            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }

        public String ArmarFiltro(String orden = "")
        {
            String resultado = "";
            String semestre = cboSemestre.Text;
            String ciclo = cbCiclo.Text;
            String cursoselecciona = comboCursos.SelectedValue;

            if (!semestre.Equals("--Todos--"))
            {
                resultado = " and Semestre='" + semestre + "' ";
            }

            if (!ciclo.Equals("--Todos--"))
            {
                resultado += " and dn.CICLOS='" + ciclo + "' ";
            }
            if (checkComplentario.Checked)
            {
                resultado += " and TIPOCUR=10 ";

            }
            if (!cursoselecciona.Equals("--Todos--"))
            {
                resultado += " and dn.CURSOS='" + cursoselecciona + "'";

            }


            return resultado;
        }

        NotaComplementaria notaComplementaria = null;

        protected void gridListadoNotas_SelectedIndexChanging1(object sender, GridViewSelectEventArgs e)
        {
            LabelError.Text = null;
            try
            {
                var llaves = gridListadoNotas.DataKeys[e.NewSelectedIndex].Values;
                string idNota = (string)llaves[0];
                string idNotaComplementaria = (string)llaves[1];


                if (idNotaComplementaria == null)
                {
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "script", "alert('" + "Solo se pueden editar notas complementarias." + "" + "');", true);
                }


                else
                {
                    OperacionesNotas openota = new OperacionesNotas();
                    Nota nota = openota.RecuperarNotaxID(idNota);
                    notaComplementaria = openota.RecuperarNotaComplementariaxID(idNotaComplementaria);
                    Session["Nota"] = nota;
                    Session["NotaComplementaria"] = notaComplementaria;
                    mpeAgregaNota.Show();

                    MostrarNota(notaComplementaria);
                }

            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }

        private void MostrarNota(NotaComplementaria nota)
        {
            LabelError.Text = null;
            try
            {
                comboCiclos.Items.Clear();
                LlenarComboCiloNota();
                comboCiclos.Text = nota.CICLOS.ToString();
                comboSemestre.Text = nota.Periodo.ToString();
                txtNota.Text = nota.FINAL.ToString();
                txtObservacion.Text = nota.OBSERV;
                LabelCodigoNota.Text = nota.Alumno.ID;
                LabelNombreNota.Text = nota.Alumno.APEPAT + " " + nota.Alumno.APEMAT + " " + nota.Alumno.NOMBRE;
                LabelEspecialidadNota.Text = nota.Alumno.Especialidad.DESCRIPCCION;
                LabelCursosNota.Text = nota.Curso.DESCRIPCCION;
            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            mpeAgregaNota.Hide();
            int Id_usuario = Convert.ToInt32(Session["Id_usuario"].ToString());
            Master.llenarMenu(Id_usuario);
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            LabelError.Text = null;
            try
            {
                OperacionesNotas OPEN = new OperacionesNotas();
                Nota nota = (Nota)Session["Nota"];
                NotaComplementaria notac = (NotaComplementaria)Session["NotaComplementaria"];

                Int32 cicloanterior = Convert.ToInt32(notac.CICLOS);
                Int32 cicloactual = Convert.ToInt32(comboCiclos.Text);

                Int32 ciclodeactualizacion = Math.Min(cicloanterior, cicloactual);
                notac.Periodo = comboSemestre.Text;
                notac.CICLOS = comboCiclos.Text;
                notac.FINAL = Convert.ToInt32(txtNota.Text);
                notac.OBSERV = txtObservacion.Text.Trim();

                notac.TOTACU = ((notac.FINAL * Convert.ToInt32(notac.CREDIT)) - (nota.FINAL * nota.CREDIT_COMPLEM));

                nota.SEMESTRE = comboSemestre.Text;
                nota.CICLOS = comboCiclos.Text;
                nota.FINAL = Convert.ToInt32(txtNota.Text);
                nota.OBSERV = txtObservacion.Text.Trim();
                OPEN.ActualizarNota(notac, nota);

                OPEN.ActualizarPeriodo(nota, ciclodeactualizacion);

                ReporteNominaComplementaria_BL rep = new ReporteNominaComplementaria_BL();
                if (nota.FINAL > 10)
                {
                    rep.ActualizarFlagNotasDesaprobados(nota.Alumno.ID, nota.Curso.ID, 1);
                }
                else {
                    rep.ActualizarFlagNotasDesaprobados(nota.Alumno.ID, nota.Curso.ID, 0);
                }
                
                mpeAgregaNota.Hide();
                LLenarGrillaNota();

            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }

            int Id_usuario = Convert.ToInt32(Session["Id_usuario"].ToString());
            Master.llenarMenu(Id_usuario);

            

        }

        protected void gridListadoNotas_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            LabelError.Text = null;
            try
            {
                gridListadoNotas.PageIndex = e.NewPageIndex;
                LLenarGrillaNotaCache();

            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }

        }

        protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
        {

        }

        protected void gridListadoNotas_Sorting(object sender, GridViewSortEventArgs e)
        {
            gridListadoNotas.Caption = null;
            LabelError.Text = null;
            try
            {

                OperacionesNotas openotas = new OperacionesNotas();
                List<ListadoNotasDeAlumno> listado = (List<ListadoNotasDeAlumno>)Session["ListadoNotas"];



                if (e.SortExpression.Equals("CursoOrden"))
                {
                    if (e.SortDirection == SortDirection.Ascending)
                    {
                        listado = listado.OrderBy(p => p.DESCUR.Substring(0)).ToList();
                    }
                    else
                    {
                        listado = listado.OrderByDescending(p => p.DESCUR.Substring(0)).ToList();
                        e.SortDirection = SortDirection.Ascending;
                    }
                }





                if (listado.Count == 0)
                {
                    gridListadoNotas.Caption = "No se encontraron niguna nota";
                }


                gridListadoNotas.DataSource = listado;

                gridListadoNotas.DataBind();


            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }

        protected void gridListadoNotas_Sorted(object sender, EventArgs e)
        {
            //        gridListadoNotas.Caption += " Ordenado por " +
            //gridListadoNotas.SortExpression.ToString() +
            //" en " + gridListadoNotas.SortDirection.ToString() +
            //" orden.";
        }

        protected void gridListadoNotas_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            LabelError.Text = null;
            String comando = e.CommandName;
            if (comando.Equals("AGREGAR"))
            {

            }
            else if (comando.Equals("ELIMINAR"))
            {

            }
        }

        protected void btnBorarr_Click(object sender, EventArgs e)
        {



            LabelError.Text = null;
            try
            {
                OperacionesNotas OPEN = new OperacionesNotas();
                Nota nota = (Nota)Session["Nota"];
                NotaComplementaria notac = (NotaComplementaria)Session["NotaComplementaria"];
                Int32 cicloanterior = Convert.ToInt32(notac.CICLOS);
                Int32 cicloactual = Convert.ToInt32(comboCiclos.Text);

                //Int32 ciclodeactualizacion = Math.Min(cicloanterior, cicloactual);
                Int32 ciclodeactualizacion = 1;
                OPEN.EliminarNota(notac, nota);


                OPEN.ActualizarPeriodo(nota, ciclodeactualizacion);


                mpeAgregaNota.Hide();
                LLenarGrillaNota();


                ReporteNominaComplementaria_BL rep = new ReporteNominaComplementaria_BL();
                rep.ActualizarFlagNotasDesaprobados(nota.Alumno.ID, nota.Curso.ID, 0);

            }
            catch (Exception ex)
            {
                LabelError.Text = ex.Message;
            }
        }

        protected void gridListadoNotas_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {

        }



    }
}